#ifndef FILE_PATH_UTILS_HPP
#define FILE_PATH_UTILS_HPP

#include "log.hpp"
#include "httplib.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <stdexcept>
#include <sys/stat.h>
#include <unistd.h>

#define EXE_TO_PHOTO_DIR "../source/photos"

// 获取relativePath相对于当前工作目录的绝对路径
std::string getProjectRelativePath(const std::string& relativePath) {
    char buffer[1024];

    // 获取当前工作目录
    if (!getcwd(buffer, sizeof(buffer))) {
        LOG_ERROR("getProjectRelativePath(): 获取当前工作目录失败");
        exit(1);
    }
    LOG_INFO("当前工作目录: %s", buffer);

    // 拼接当前目录与相对路径
    std::string basePath(buffer);
    return basePath + "/" + relativePath;
}

void configureStaticFiles(httplib::Server& svr) {
    // 使用相对路径指定照片目录
    std::string relativePhotoDir = EXE_TO_PHOTO_DIR; // 相对路径
    std::string absolutePhotoDir = getProjectRelativePath(relativePhotoDir);

    // 检查目录是否存在
    struct stat info;
    if (stat(absolutePhotoDir.c_str(), &info) != 0 || !(info.st_mode & S_IFDIR)) {
        LOG_FATAL("Photo directory does not exist: ", absolutePhotoDir);
        exit(1);
    }

    // 设置静态文件服务
    svr.set_mount_point("/photos", absolutePhotoDir);
    LOG_INFO("静态文件服务配置: /photos -> %s", absolutePhotoDir);
}

#endif // FILE_PATH_UTILS_HPP